# -*- coding: utf-8 -*-
import scrapy


class MarketnewsSpider(scrapy.Spider):
    name = 'marketNews'
    allowed_domains = ['finance.eastmoney.com/']
    start_urls = ['http://finance.eastmoney.com/a/cpljh.html']

    def parse(self, response):
        #新闻列表页的url
        url='http://finance.eastmoney.com/a/cpljh_{}.html'
        #先定位到目录列表的ul
        ul=response.xpath('//ul[@id="newsListContent"]')[0]
        #查找到所有新闻的url
        hrefs=ul.xpath('./li//a/@href').extract()
        #因为这些href会重复一次，所以遍历的时候要跳过一个
        for i in range(0,len(hrefs),2):
            yield scrapy.Request(hrefs[i],callback=self.parseContent,dont_filter=True)
        #查看是否有下一页
        texts=response.xpath('//a[@target="_self"]/text()').extract()
        if '下一页' in texts:
            yield scrapy.Request(url.format(2),callback=self.parseNextPage,meta={'page':1},dont_filter=True)

    def parseNextPage(self, response):
        #新闻列表页的url
        url='http://finance.eastmoney.com/a/cpljh_{}.html'
        #获取当前页数
        page=response.meta["page"]
        print(page)
        #先定位到目录列表的ul
        ul=response.xpath('//ul[@id="newsListContent"]')[0]
        #查找到所有新闻的url
        hrefs=ul.xpath('./li//a/@href').extract()
        #因为这些href会重复一次，所以遍历的时候要跳过一个
        for i in range(0,len(hrefs),2):
            yield scrapy.Request(hrefs[i],callback=self.parseContent,dont_filter=True)
        #查看是否有下一页
        texts=response.xpath('//a[@target="_self"]/text()').extract()
        if '下一页' in texts:
            yield scrapy.Request(url.format(page+1),callback=self.parseNextPage,meta={'page':page+1},dont_filter=True)

    def parseContent(self, response):
        #获取到包含头部和正文内容的div
        div=response.xpath('//div[@class="newsContent"]')[0]
        #获取标题
        title=div.xpath('.//h1/text()').extract()[0]
        #获取时间
        timeString=div.xpath('.//div[@class="time"]/text()').extract()[0]
        year=timeString[:4]
        month=timeString[5:7]
        day=timeString[8:10]
        date=str(year)+'-'+str(month)+'-'+str(day)
        TIME=timeString[-5:]#用大写是为了和time区分开
        #获取作者
        try:
            authors=div.xpath('.//div[@class="author"]/text()').extract()[0][3:].split(' ')
            if len(authors)==0 or authors[0]=='':
                author=div.xpath('.//div[@class="author"]/a/text()').extract()[0]#有的作者用链接显示的
            else:
                author=""
                for auth in authors:
                    author+=(auth+';')
                author=author[:-1]
        except IndexError:
            try:
                author=div.xpath('.//div[@class="author"]/a/text()').extract()[0]#有的作者用链接显示的
            except IndexError:
                author='佚名'
        #来源，即本报道隶属于什么组织
        try:
            source=div.xpath('.//div[@class="source data-source"]/@data-source').extract()[0]
        except IndexError:
            source='佚'
        #获取正文
        ps=div.xpath('.//p/text()').extract()
        content=""
        for p in ps:
            content+=p
        item={
            'ads_title':title,
            'ads_date':date,
            'ads_time':TIME,
            'ads_author':author,
            'ads_source':source,
            'ads_content':content,
            'type':'ads_news',
            }
        yield item
